<?php

include_once ENTITIES.'loja.php';
include_once ENTITIES."telefone.php";

include_once MODELS.'loja.php';
include_once MODELS."telefone.php";

class LojaController {
    
    private $modelLoja;
    private $modelTelefone;
    
    public function __construct() {
        $this->modelLoja = new LojaModel();
        $this->modelTelefone = new TelefoneModel();
    }


    public function addLoja(Loja $loja = null){
        if(is_null($loja)){
            $loja = new Loja();
            $this->linkLoja($loja);
        }
        global $config;
        if( empty($loja->rua) || empty($loja->bairro) || empty($loja->cep) ||
            empty($loja->cnpj) || empty($loja->cidade) || empty($loja->sigla)||
            empty($loja->cgc) )
        {
            $config->failInFunction("Os campos: Sigla, Cidade, Rua, Bairro, CEP, CNPJ e CGC são necessários para inserção");
            $config->redirect("index.php?op=cad-loja");
        }
          
        $hasId = $config->filter("for-update-id");
        $res = false;
        $resTel = true;
        if(empty($hasId)){
            $res = $this->modelLoja->insert($loja);
            if($res){
                foreach ($loja->telefones as $telefone){
                    $telefone->dono = $res;
                }
                $resTel = empty($loja->telefones) ? true : $this->modelTelefone->insert(TelefoneModel::TABLE_LOJA, $loja->telefones);
            }
        } else {
            $loja->id = $hasId;
            $res = $this->modelLoja->update($loja);
            foreach ($loja->telefones as $telefone){
                $telefone->dono = $loja->id;
            }
            if(empty ($loja->telefones)){
                $resTel =  $this->modelTelefone->delete(TelefoneModel::TABLE_LOJA, $loja->id);
            } else
                $resTel =  $this->modelTelefone->delete(TelefoneModel::TABLE_LOJA, $loja->id) && 
                           $this->modelTelefone->insert(TelefoneModel::TABLE_LOJA, $loja->telefones);
        }
        
        if($res){
            $message = ($resTel) ? null : "Porém telefones não foram inseridos";
            $config->successInFunction($message);
        } else {
            $config->failInFunction($this->modelLoja->handleError());                
        }
        
        $config->redirect("index.php?op=cad-loja");
        
    }
    
    public function removeLoja(){
        global $config;
        $id_loja = $config->filter("loja");
        if(isset($id_loja)){
            if($this->modelLoja->delete($id_loja)){
                $message = null;
                if(!$this->modelTelefone->delete(TelefoneModel::TABLE_LOJA, $id_loja))
                    $message = "Porém telefones não foram apagados";
                $config->successInFunction($message);
            } else {
                $config->failInFunction($this->modelLoja->handleError());
            }    
        } else {
            $config->failInFunction("Loja não informada");
        }
        $config->redirect("?op=cad-loja");
    }
    
    public function linkLoja(Loja &$loja){
        global $config;
        $loja->sigla = mb_strtoupper($config->filter("sigla"), 'UTF-8');
        $loja->rua = mb_strtoupper($config->filter("rua"), 'UTF-8');
        $loja->numero = $config->filter("numero");
        $loja->bairro = mb_strtoupper($config->filter("bairro"), 'UTF-8');
        $cep = $config->filter("cep");
        $loja->cep = str_replace(array(".","-"), "", $cep);
        $cnpj = $config->filter("cnpj");
        $loja->cnpj = str_replace(array(".","-","/"), "", $cnpj);
        $loja->cidade = (int) $config->filter("cidade");
        $loja->cgc = $config->filter("cgc");
        $loja->gerente = $config->filter("gerente");
        $loja->telefones = array();
        $i = 1;
        $telefone = $config->filter("telefone-$i");
        while(!is_null($telefone)){
            if(!empty($telefone)){
                $tel = str_replace(array("(",")","-"," "), "", $telefone);
                $loja->telefones[] = new Telefone($tel);
            }
            $i++;
            $telefone = $config->filter("telefone-$i");
        }
    }
    
    public function getAllLojas($foreign_values = false){
        if($foreign_values){
            return $this->modelLoja->superSelect();
        }
        return $this->modelLoja->select();
    }
    
    public function getAllTelefonesOfLoja($loja_id){
        $condition = TelefoneModel::LOJA." = $loja_id";
        return $this->modelTelefone->select(TelefoneModel::TABLE_LOJA, $condition);
    }
    
    public function getLoja($id_loja, $foreign_values = false){
        $condition = LojaModel::TABLE.".".LojaModel::ID." = $id_loja";
        if($foreign_values) { 
            $loja = $this->modelLoja->superSelect($condition);
            include_once CONTROLLERS."funcionario.php";
            $controller = new FuncionarioController();
            foreach($loja as $l){
                if(empty($l->gerente)) $l->gerente = "";
                else { 
                    $gerente = $controller->getFuncionario($l->gerente);
                    $l->gerente = $gerente->nome;
                }
            }
        }
        else $loja = $this->modelLoja->select("*", $condition);
        if(!empty($loja)) return $loja[0];
        return new Loja();
    }
    
}
?>
